package com.ruoyi.system.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.DatingMember;

/**
 * 婚恋人员信息Mapper接口
 *
 * @author ruoyi
 * @date 2024-01-15
 */
@Mapper
public interface DatingMemberMapper extends BaseMapper<DatingMember>
{
    /**
     * 查询婚恋人员信息列表（支持条件查询）
     *
     * @param datingMember 婚恋人员信息
     * @return 婚恋人员信息集合
     */
    public List<DatingMember> selectDatingMemberList(DatingMember datingMember);

    /**
     * 根据人员编号查询婚恋人员信息
     *
     * @param memberNo 人员编号
     * @return 婚恋人员信息
     */
    public DatingMember selectDatingMemberByMemberNo(String memberNo);

    /**
     * 根据手机号码查询婚恋人员信息
     *
     * @param phone 手机号码
     * @return 婚恋人员信息
     */
    public DatingMember selectDatingMemberByPhone(String phone);

    /**
     * 查询符合匹配条件的人员列表
     *
     * @param datingMember 匹配条件
     * @return 婚恋人员信息集合
     */
    public List<DatingMember> selectMatchableMemberList(DatingMember datingMember);

    /**
     * 校验人员编号是否唯一
     *
     * @param memberNo 人员编号
     * @return 结果
     */
    public int checkMemberNoUnique(String memberNo);

    /**
     * 校验手机号码是否唯一
     *
     * @param phone 手机号码
     * @return 结果
     */
    public int checkPhoneUnique(String phone);

    /**
     * 统计总会员数
     *
     * @return 总会员数
     */
    public Long countTotalMembers();

    /**
     * 统计今日新增会员数
     *
     * @return 今日新增会员数
     */
    public Long countTodayNew();

    /**
     * 根据性别统计会员数
     *
     * @param gender 性别
     * @return 会员数
     */
    public Long countByGender(@Param("gender") String gender);

    /**
     * 统计今日匹配数
     *
     * @return 今日匹配数
     */
    public Long countTodayMatches();

    /**
     * 根据日期和性别统计新增会员数
     *
     * @param date 日期
     * @param gender 性别
     * @return 新增会员数
     */
    public Long countNewMembersByDateAndGender(@Param("date") String date, @Param("gender") String gender);

    /**
     * 根据年龄范围和性别统计会员数
     *
     * @param minAge 最小年龄
     * @param maxAge 最大年龄
     * @param gender 性别
     * @return 会员数
     */
    public Long countByAgeRangeAndGender(@Param("minAge") int minAge, @Param("maxAge") int maxAge, @Param("gender") String gender);

    /**
     * 根据收入范围统计会员数
     *
     * @param minIncome 最小收入
     * @param maxIncome 最大收入
     * @return 会员数
     */
    public Long countByIncomeRange(@Param("minIncome") int minIncome, @Param("maxIncome") int maxIncome);
}
